GraphQL হল একটি শক্তিশালী এবং নমনীয় ডেটা কুয়েরি ভাষা যা ক্লায়েন্টদের নির্দিষ্ট ডেটা চাহিদা পূরণের জন্য সরাসরি সার্ভার থেকে ডেটা অনুরোধ করার সুবিধা প্রদান করে। এটি REST API এর তুলনায় আরও দক্ষ এবং কার্যকরী, কারণ এটি ক্লায়েন্টকে নির্দিষ্ট ডেটা ফিল্টার করতে এবং কেবলমাত্র প্রয়োজনীয় ডেটা পাঠানোর জন্য সক্ষম করে। GraphQL সাধারণত JSON ডেটার মাধ্যমে ডেটা পাঠায় এবং গ্রহণ করে।
GraphQL এবং JSON দিয়ে Data Fetching উদাহরণ
Scenario: আমরা একটি ওয়েব অ্যাপ্লিকেশন তৈরি করবো যেখানে GraphQL ব্যবহার করে সার্ভার থেকে JSON ফরম্যাটে ডেটা ফেচ করা হবে। এখানে, ক্লায়েন্ট একটি কুয়েরি পাঠাবে যা সার্ভার থেকে নির্দিষ্ট ডেটা চায়, এবং সার্ভার সেই ডেটা JSON ফরম্যাটে ক্লায়েন্টকে পাঠাবে।
1. GraphQL API Setup
ধরা যাক, আমাদের একটি GraphQL API সার্ভার রয়েছে, যেখানে একটি User অবজেক্ট রয়েছে, যার মধ্যে name, age, email, এবং address রয়েছে। আমরা ক্লায়েন্টে শুধু name এবং email ডেটা চেয়ে অনুরোধ করবো।
1.1. GraphQL Server Example (Node.js)
আমরা এখানে Node.js ব্যবহার করে একটি GraphQL API সার্ভার তৈরি করবো, এবং সেটি ক্লায়েন্ট থেকে আসা কুয়েরির ভিত্তিতে JSON ডেটা রিটার্ন করবে।
প্রথমে Node.js প্রজেক্ট তৈরি করুন:
mkdir graphql-json-example
cd graphql-json-example
npm init -y
npm install express express-graphql graphql
1.2. Server Setup
const express = require('express');
const { graphqlHTTP } = require('express-graphql');
const { GraphQLObjectType, GraphQLSchema, GraphQLString, GraphQLInt } = require('graphql');
const app = express();
// Define User Type
const UserType = new GraphQLObjectType({
name: 'User',
fields: {
name: { type: GraphQLString },
age: { type: GraphQLInt },
email: { type: GraphQLString },
address: { type: GraphQLString }
}
});
// Root Query
const RootQuery = new GraphQLObjectType({
name: 'RootQueryType',
fields: {
user: {
type: UserType,
args: { id: { type: GraphQLString } },
resolve(parent, args) {
// Sample data (you can replace this with actual DB call)
const users = [
{ id: '1', name: 'John Doe', age: 30, email: 'johndoe@example.com', address: '123 Main St' },
{ id: '2', name: 'Jane Smith', age: 25, email: 'janesmith@example.com', address: '456 Elm St' }
];
return users.find(user => user.id === args.id);
}
}
}
});
// Mutation (optional, for creating/updating data)
const Mutation = new GraphQLObjectType({
name: 'Mutation',
fields: {
// Add mutation fields here if needed
}
});
// Schema
const schema = new GraphQLSchema({
query: RootQuery,
mutation: Mutation
});
// Set up GraphQL endpoint
app.use('/graphql', graphqlHTTP({
schema,
graphiql: true // Set to true to access GraphiQL interface in browser
}));
app.listen(4000, () => {
console.log('Server running on http://localhost:4000/graphql');
});
এখানে, GraphQL Schema তৈরি করা হয়েছে যেখানে User নামক একটি টাইপ ডিফাইন করা হয়েছে এবং একটি রুট কুয়েরি user ডিফাইন করা হয়েছে যা ইউজারের আইডি অনুসারে ইউজারের ডেটা ফেরত দেয়।
2. Client Side – Sending GraphQL Query
এখন, আমরা ক্লায়েন্ট সাইডে GraphQL Query পাঠাবো। ক্লায়েন্টের কুয়েরি হবে এমনভাবে যাতে শুধুমাত্র name এবং email ফিল্ডস রিটার্ন করা হয়।
2.1. GraphQL Query Example
GraphQL ক্লায়েন্টের মাধ্যমে আমরা নিম্নলিখিত কুয়েরি পাঠাবো:
{
user(id: "1") {
name
email
}
}
এখানে, id: "1" দিয়ে আমরা ইউজারের আইডি চাচ্ছি এবং name, email কেবল চাচ্ছি।
2.2. Client Request Example with Fetch (JavaScript)
আপনি fetch API ব্যবহার করে এই কুয়েরি পাঠাতে পারেন:
const query = `
{
user(id: "1") {
name
email
}
}
`;
fetch('http://localhost:4000/graphql', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ query })
})
.then(response => response.json())
.then(data => console.log('Data received:', data))
.catch(error => console.error('Error:', error));
এখানে, আমরা GraphQL Query পোস্ট করে JSON ফরম্যাটে ডেটা রিটার্ন করছি। সার্ভার কুয়েরি অনুসারে শুধুমাত্র name এবং email পাঠাবে।
3. Response (JSON Data)
যখন সার্ভার এই কুয়েরি গ্রহণ করবে এবং সফলভাবে রেসপন্স করবে, তখন এটি নিম্নলিখিত JSON ফরম্যাটে ডেটা ফিরিয়ে দেবে:
{
"data": {
"user": {
"name": "John Doe",
"email": "johndoe@example.com"
}
}
}
এখানে, GraphQL Response JSON ফরম্যাটে এসেছে, যেটি name এবং email ফিল্ডগুলির মান ধারণ করছে।
4. Handling Errors
যদি কোনো ত্রুটি ঘটে, যেমন যদি ইউজার আইডি না থাকে, তাহলে আপনি নিম্নলিখিত JSON ত্রুটি মেসেজ পেতে পারেন:
{
"errors": [
{
"message": "User not found"
}
]
}
এটি নির্দেশ করে যে, কুয়েরির মাধ্যমে ইউজারের ডেটা পাওয়া যায়নি।
সারাংশ
এই উদাহরণে, GraphQL এর মাধ্যমে JSON ডেটা ফেচ করার প্রক্রিয়া দেখানো হয়েছে। সার্ভার থেকে নির্দিষ্ট ডেটা অনুরোধের জন্য GraphQL Query পাঠানো হয়েছে এবং তার পর সার্ভার সেই কুয়েরি প্রক্রিয়া করে JSON ফরম্যাটে রেসপন্স পাঠিয়েছে। এটি ক্লায়েন্ট এবং সার্ভারের মধ্যে ডেটা ট্রান্সফারকে আরো কার্যকরী এবং নমনীয় করে তোলে। GraphQL এর সাহায্যে আপনি সার্ভার থেকে নির্দিষ্ট ডেটা চেয়ে দ্রুত ফলাফল পেতে পারেন, যা REST API তে সম্ভব হয় না।
Read more